//导入mysql模块
const mysql = require('mysql');
//创建连接池
const pool = mysql.createPool({
    host: 'localhost', //数据库的ip地址
    user: 'root', //登录数据库的账号
    password: '123456', //登录数据库的密码
    database: 'my_db_01' //指定要操作哪个数据库
});

/* //测试连接池是否正常工作
pool.query('select 1', (err, results) => {
    //这个sql语句没有任何实质上的左右，只是为了测试连接池是否正常工作
    if (err) return console.log(err.message)
    console.log(results);
    //只要能打印出[ RowDataPacket { '1': 1 } ]的结果就说明数据库连接正常
}); */

/* //1.查询users表中所有数据
const sql_select = 'select * from users';
pool.query(sql_select, (err, results) => {
    if (err) return console.log(err.message);
    console.log(results); //results结果是数组的形式
}); */

/* //2.插入数据
//要存储的数据对象
const spider = { username: 'abchello', password: '123456' };
//待执行的sql语句
const sql_insert = 'insert into users (username,password) values (?,?)';
//这里的 英文 ?  是占位符
//使用数组的形式为sql语句中的 ? 占位符传递参数
pool.query(sql_insert, [spider.username, spider.password], (err, results) => {
    if (err) return console.log(err.message); //失败
    if (results.affectedRows === 1) {
        console.log('插入成功');
        console.log(results);//results结果是对象的形式
    }
}); */

/* //插入数据的便捷方式
//向表中新增数据时，如果数据对象的每个属性和数据表的字段一一对应，则可以通过如下方式快速插入数据：
const peolpe = { username: 'abch123', password: '123456' };
const sql_insert2 = 'insert into users set ?';
pool.query(sql_insert2, peolpe, (err, results) => {
    if (err) return console.log(err.message);
    if (results.affectedRows === 1) {
        console.log('插入成功');
        console.log(results);
    }
}); */



/* //更新数据
const peolpe = { id: 7, username: 'asdfg', password: '123456' };
const sql_update = 'update users set username= ?,password= ? where id = ?';
pool.query(sql_update, [peolpe.username, peolpe.password, peolpe.id], (err, results) => {
    if (err) return console.log(err.message);
    if (results.affectedRows === 1) {
        console.log('更新成功');
        console.log(results);
    }
}); */

/* //更新数据的便捷方式
//更新表数据时，如果数据对象的每个属性和数据表的字段一一对应，则可以通过如下方式快速更新表数据
const peolpe2 = { id: 7, username: 'asdfg', password: '123456' };
const sql_update2 = 'update users set ? where id = ?';
pool.query(sql_update2, [peolpe2, peolpe2.id], (err, results) => {
    if (err) return console.log(err.message);
    if (results.affectedRows === 1) {
        console.log('更新成功');
        console.log(results);
    }
}); */

/* //删除数据
const sql_delete = 'delete from users where id=?';
//pool.query(sql_delete, [7], (err, results) => {//直接传入参数或者以数组形式传入参数都是可以的
pool.query(sql_delete, 5, (err, results) => {
    if (err) return console.log(err.message);
    if (results.affectedRows === 1) {
        console.log('删除成功');
        console.log(results);
    }
}); */

//标记删除
//使用 DELETE 语句，会把真正的把数据从表中删除掉。为了保险起见，推荐使用标记删除的形式，来模拟删除的动作。所谓的标记删除，就是在表中设置类似于 status 这样的状态字段，来标记当前这条数据是否被删除。
const sql_delete2 = 'update users set status=1 where id=?';
pool.query(sql_delete2, 7, (err, results) => {
    if (err) return console.log(err.message);
    if (results.affectedRows === 1) {
        console.log('标记删除成功');
        console.log(results);
    }
});

pool.query(sql_select, (err, results) => {
    if (err) return console.log(err.message);
    console.log(results); //results结果是数组的形式
});